package ljl.bilibili.gateway.util;


import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Base64;
import java.util.Random;


public class CaptchaUtil {
    /**
     * 生成一个随机颜色
     * @param fc 颜色的最小值，用于限制生成颜色的下限
     * @param bc 颜色的最大值，用于限制生成颜色的上限
     * @return 生成的随机颜色
     */
    public static Color getRandColor(int fc, int bc) {
        Random random = new Random();
        //确保颜色值的上限和下限在合法范围内
        if (fc > 255) {
            fc = 255;
        }
        if (bc > 255) {
            bc = 255;
        }
        //随机生成颜色的RGB值
        int r = fc + random.nextInt(bc - fc);
        int g = fc + random.nextInt(bc - fc);
        int b = fc + random.nextInt(bc - fc);
        return new Color(r, g, b);
    }

    /**
     * 将BufferedImage对象转换为Base64编码的字符串
     * @param image BufferedImage对象，表示要转换的图片
     * @return 返回图片的Base64编码字符串
     * @throws IOException
     */
    public static String imageToBase64(BufferedImage image) throws IOException {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        // 将图片写入字节数组输出流
        ImageIO.write(image, "png", byteArrayOutputStream);
        // 将内存流中的图片数据转换为字节数组
        byte[] bytes = byteArrayOutputStream.toByteArray();
        // 将字节数组转换为Base64编码的字符串
        return Base64.getEncoder().encodeToString(bytes);
    }
}